/*
 * D-Bus Java Implementation Copyright (c) 2005-2006 Matthew Johnson This
 * program is free software; you can redistribute it and/or modify it under the
 * terms of either the GNU Lesser General Public License Version 2 or the
 * Academic Free Licence Version 2.1. Full licence texts are included in the
 * COPYING file with this program.
 */
package org.freedesktop.dbus;

class RemoteObject {
  boolean                        autostart;
  String                         busname;
  Class<? extends DBusInterface> iface;
  String                         objectpath;

  public RemoteObject(String busname, String objectpath, Class<? extends DBusInterface> iface, boolean autostart) {
    this.busname = busname;
    this.objectpath = objectpath;
    this.iface = iface;
    this.autostart = autostart;
  }

  public boolean autoStarting() {
    return autostart;
  }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof RemoteObject)) { return false; }
    RemoteObject them = (RemoteObject) o;

    if (!them.objectpath.equals(objectpath)) { return false; }

    if ((null == busname) && (null != them.busname)) { return false; }
    if ((null != busname) && (null == them.busname)) { return false; }
    if ((null != them.busname) && !them.busname.equals(busname)) { return false; }

    if ((null == iface) && (null != them.iface)) { return false; }
    if ((null != iface) && (null == them.iface)) { return false; }
    if ((null != them.iface) && !them.iface.equals(iface)) { return false; }

    return true;
  }

  public String getBusName() {
    return busname;
  }

  public Class<? extends DBusInterface> getInterface() {
    return iface;
  }

  public String getObjectPath() {
    return objectpath;
  }

  @Override
  public int hashCode() {
    return (null == busname ? 0 : busname.hashCode()) + objectpath.hashCode() + (null == iface ? 0 : iface.hashCode());
  }

  @Override
  public String toString() {
    return busname + ":" + objectpath + ":" + iface;
  }
}
